#ifndef KMY_RESOURCEMANAGER_H
#define KMY_RESOURCEMANAGER_H

#include <string>
#include <map>

#include "ResPath/ResourcePath.h"
#include "KmyImagePak.h"
#include "./ScriptRunner/KmyScript.h"
#include "KmySpriteTemplate.h"
#include "KmyConfig.h"
#include "KmyIFile.h"
#include "KmyFont.h"

using namespace std;

class KmyResourceManager
{
public:
    KmyResourceManager();
    virtual ~KmyResourceManager();

    static KmyResourceManager *getInstance();

    void setFilemanager(KmyIFile *filemanager);
    /** 初始化各个资源的路径 */
    void initialize(KmyConfig &config);
    void clear();

    void clearImage();
    void clearSound();
    void clearScript();
    void clearText();
    void clearSprite();

    /** 获取图片资源 */
    KmyImagePak* getImage(const string &name);

    /** 获取声音资源 */
      //dummy
    /** 获取脚本资源 */
    KmyScript* getScript(const string &name);
    /** 获取入口脚本 */
    KmyScript* getEntranceScript();
    /** 获取宏定义脚本 */
    KmyScript* getMacroScript();

    /** 获取文本资源 */
    //dummy
    /** 获取精灵数据（不含图 */
    KmySpriteTemplate* getSpriteTemplate(const string &name);

    KmyFont* getFont();

    /** 论外方法 */

    //删除，平台无关
//    /** 创建纹理buff（平台相关，平台相关暂时用文件管理器管） */
//    KmyITexture *createTexture(const string &name, int mode, const u8* data,
//                               int w, int h, bool is_buffer);
private:
    static KmyResourceManager *instance;

    bool putImage(const string &name, KmyImagePak* imgs);
    bool putScript(const string &name, KmyScript* scp);
    bool putSprite(const string &name, KmySpriteTemplate* spt);

    bool putResPath(ResourcePath *rp);
    ResourcePath* getResPath(const string &resname);
    void resListClear();

    map<string, ResourcePath*> res_list;

    /** 图片资源 */
    map<string, KmyImagePak*> img_resources;
    /** 声音资源 */
    /** 脚本资源 */
    map<string, KmyScript*> scp_resources;
    /** 文字资源 */

    /** 精灵数据资源 */
    map<string, KmySpriteTemplate*> spt_resources;

    KmyIFile *filemanager;

    KmyScript* macro_script;
    KmyScript* entrance_script;

    KmyFont* font;
    KmyFont* loadFont(const string &name);
};

#endif // RESOURCEMANAGER_H
